/* lance un script depuis REXX: (mettez l'extension par défaut dans sendRexxMsg) */
sendRexxMsg('REXX','scriptname',NIL,0)
/* envoie une commande 'QUIT' à nous même :o) */
sendRexxMsg('HoteExemple','QUIT',NIL,0)
*/
/* informe l'utilisateur que ça marche */
WriteF('Attend des évènements. Envoyez moi une commande arexx QUIT en tapant:\nrx "ADDRESS \aHoteExemple\a; QUIT" depuis un shell. Ou pressez CTRL-C pour m\aarrêter.\n')
/* attend */
wait()
deletePort(hostport)
ELSE
WriteF('Désolé bonhomme, je crois que je tourne déja une fois.\n')
ENDIF
CloseLibrary(rexxsysbase)
ELSE
WriteF('Ne peut pas ouvrir la rexxsyslib.library. J\aen ai vraiment besoin!\n')
ENDIF
EXCEPT
WriteF('Quleque chose comme \d n'a pas marché, tu vois?\n')
deletePort(hostport)
hostport:=NIL
IF rexxsysbase
CloseLibrary(rexxsysbase)
rexxsysbase:=NIL
ENDIF
ENDPROC
/* FEND */
/* FOLD "wait" */
PROC wait()
DEF signalmask=0
DEF hostmask=0
/* masque signal pour notre port hôte */
hostmask:=Shl(1,hostport.sigbit)
/* continue à tourner ou messages non confirmés? */
WHILE runflag OR unconfirmed
/* attend les signaux d'évènements */
signalmask:=Wait(hostmask OR SIGBREAKF_CTRL_C)
/* et gère les évènements qui arrive */
IF signalmask AND hostmask THEN handleRexxMsg()
IF signalmask AND SIGBREAKF_CTRL_C THEN runflag:=FALSE
ENDWHILE
ENDPROC
/* FEND */
/* FOLD "handleRexxMsg" */
PROC handleRexxMsg()
/* pointeur sur le message à gérer */
DEF rexxmsg:PTR TO rexxmsg
/* pointeur sur messagenode */
DEF msgnode:PTR TO mn
/* pointeur sur la liste de noeuds du message */
DEF listnode:PTR TO ln
/* liste de 16 pointers sur les chaines de commande */
DEF rexxargs:PTR TO LONG
/* pointe sur le premier caractère de la commande */
DEF command:PTR TO CHAR
/* (un autre) message à la queue? */
WHILE rexxmsg:=GetMsg(hostport)
/* met le pointeur sur messagenode */
msgnode:=rexxmsg.mn
/* met le pointeur sur la liste de noeuds */
listnode:=msgnode.ln
/* met le pointeur sur les commands */
rexxargs:=rexxmsg.args
/* réponse de confirmation d'un message envoyé par nous? */
IF listnode.type=NT_REPLYMSG
/* original message pointer present? */
IF rexxargs[15]
/* répond au message original */
ReplyMsg(rexxargs[15])
ENDIF
/* efface ce message de confirmation */
DeleteArgstring(rexxargs[0])
DeleteRexxMsg(rexxmsg)
/* diminue le compteur non-confirmé */
DEC unconfirmed
/* un tout nouveau message */
ELSE
/* pointe sur la commande après avoir sautés les espaces etc. */
command:=TrimStr(rexxargs[0])
WriteF('We received an ARexx command: \s\n',command)
/* initialise les codes sortants */
rexxmsg.result1:=0
rexxmsg.result2:=NIL
/* exemple de gestion d'une commande que quequ'un nous a envoyé